/**
 * 
 * 自定义中间件语法：
 *  app.use( (req,res,next)=>{
 *        req: 请求报文
 *        res：响应报文
 *        next: 是一个函数，如果想要下一个中间件或者路由的时候，需要调用
 *  } )
 * 
 * */ 
const express = require("express");

const app = express();
// 实现一个获取用户信息的接口
// 用一个自定义中间件来判断用户是否登录，如果登录，返回用户信息
// 如果未登录，则返回“未登录”。
// 写法一：这种写法的中间件，所有接口的请求都会执行用到该中间件
app.use((req,res,next)=>{
    let token = true;
    // 当我们的判断成功的时候，需要做下一步操作，不成功则不需要做下一步操作，那么成功的时候如何进行下一步呢？
    // 答：中间提供了next函数，那么我们只需要调用这个next函数即可
    if(token){
        // 当token值存在的时候表示用户已经登录
        next()
    }else{
        res.send({
            msg: "请先登录!",
            code: 500
        })
    }
})

// 中间件写法二：只有接口为/test的请求，才会执行到这个中间件
app.use("/test",(req,res,next)=>{
    console.log("测试，当用户访问任意接口的时候，是不是只有/test接口才能执行到我");
    next()
})

app.get("/admin/user/info",(req,res)=>{
    res.send({
        msg: "获取成功！",
        code: 200
    })
})


// 中间件写法三：app.get("路径", 回调函数)
// 这个回调函数也属于中间件
app.get("/test",(req,res)=>{
    res.send("接口2")
})

// 中间件的写法四：可以在get（post）函数中传入多个中间件
app.get("/getArticleList",(req,res,next)=>{
    // 这是一个中间件，可以用来处理接口相关逻辑
    req.body = {"age": 666}
    console.log("请求，经过我了");
    next()
}, (req,res)=>{
    console.log(60,req.body);// 打印出来的值就是{"age": 666}，说明中间件中的回调参数，是同一个对象
    res.send("ok")
})

app.listen("8080",()=>{
    console.log("服务器启动成功：http://127.0.0.1:8080");
})